package org.example.myleet.p888;

public class Solution {
    /**
     * 3 ms
     * 改进版
     */
    public int[] fairCandySwap(int[] A, int[] B) {
        //记录差值
        int diff = 0;
        //记录B数组中有哪些值出现
        boolean[] hashB = new boolean[100001];
        //遍历两个数组，各自数组求和，并记录B中出现过哪些数字
        for (int item : A) {
            diff += item;
        }
        for (int value : B) {
            diff -= value;
            hashB[value] = true;
        }
        int halfDiff = diff / 2;
        for (int value : A) {
            //B中满足交换条件的数字
            int counterPart = value - halfDiff;
            if (counterPart < 100001 && counterPart > 0 && hashB[counterPart]) {
                //找到，返回结果
                return new int[]{value, counterPart};
            }
        }
        return new int[]{0, 0};
    }

    /**
     * 4 ms
     * 如果要找到两个数组中满足交换的两个数，需要满足以下条件
     * A中交换的数 - B中交换的数 = 两个数组的各自的和的差值 / 2
     */
//    public int[] fairCandySwap(int[] A, int[] B) {
//        int sumA = 0, sumB = 0;
//        //记录B数组中有哪些值出现
//        boolean[] hashB = new boolean[100001];
//        //遍历两个数组，各自数组求和，并记录B中出现过哪些数字
//        for (int item : A) {
//            sumA += item;
//        }
//        for (int value : B) {
//            sumB += value;
//            hashB[value] = true;
//        }
//        int halfDiff = (sumA - sumB) / 2;
//        for (int value : A) {
//            //B中满足交换条件的数字
//            int counterPart = value - halfDiff;
//            if (counterPart < 100001 && counterPart > 0 && hashB[counterPart]) {
//                //找到，返回结果
//                return new int[]{value, counterPart};
//            }
//        }
//        return new int[]{0, 0};
//    }
}
